package model

import (
	"errors"
	"gorm.io/datatypes"
	"gorm.io/gorm"
	"time"
)

type (
	TaskLogDetailMoodle struct {
		db *gorm.DB
	}
	TaskLogDetails struct {
		ID          int64          `gorm:"primaryKey" json:"id"`                     // 主键ID
		TaskId      string         `gorm:"type:varchar(40);index" json:"task_id"`    // 任务ID
		TaskGroupId string         `gorm:"type:varchar(16)" json:"task_group_id"`    // 任务组ID
		SubTaskId   int            `gorm:"default:0" json:"sub_task_id"`             // 子任务ID
		ModelId     string         `gorm:"type:varchar(40)" json:"model_id"`         // 物模型ID
		GasType     int            `json:"gas_type"`                                 // 气体类型: 0 零气  1 标气
		GasNumber   int            `json:"gas_number"`                               // 气体数量: 单位溶度
		Unit        string         `gorm:"type:varchar(12)" json:"unit"`             // 下发的命令的单位
		Flow        int            `gorm:"default:0" json:"flow"`                    // 气体的溶度
		Range       float64        `gorm:"default:0" json:"range"`                   // 量程
		Runtime     int            `gorm:"default:0" json:"runtime"`                 // 运行时长 单位分钟
		ErrorMsg    string         `gorm:"type:varchar(128)" json:"error_msg"`       // 错误消息
		Status      int            `json:"status"`                                   // 0 处理中  1 成功  2 失败
		Event       string         `gorm:"type:varchar(16);default:''" json:"event"` // Event 事件
		ParamValue  datatypes.JSON `json:"param_value"`                              // 数值
		CreatedAt   Datetime       `json:"created_at"`                               // 创建时间
		UpdatedAt   Datetime       `json:"updated_at"`                               // 更新时间
	}
)

func NewTaskLogDetailMoodle(db *gorm.DB) *TaskLogDetailMoodle {
	return &TaskLogDetailMoodle{
		db: db,
	}
}

func (t *TaskLogDetailMoodle) Add(data TaskLogDetails) (int64, error) {
	data.CreatedAt = Datetime(time.Now())
	data.UpdatedAt = Datetime(time.Now())
	err := t.db.Create(&data).Error
	return data.ID, err
}

func (t *TaskLogDetailMoodle) Update(id int64, data TaskLogDetails) error {
	data.UpdatedAt = Datetime(time.Now())
	return t.db.Where("id = ?", id).Updates(&data).Error
}

func (t *TaskLogDetailMoodle) FindByTaskID(taskId string) ([]TaskLogDetails, error) {
	var result []TaskLogDetails
	err := t.db.Model(&TaskLogDetails{}).Where("task_id = ?", taskId).Find(&result).Order("id asc").Error
	if errors.Is(err, gorm.ErrRecordNotFound) {
		return []TaskLogDetails{}, nil
	}
	return result, err
}
